package src.main.BehavioralPatterns.TemplateMethod;

// 定义抽象模板类
public abstract class BeverageTemplate {
    // 模板方法（final禁止子类覆盖）
    public final void prepareBeverage() {
        boilWater();
        brew();
        pourInCup();
        if (customerWantsCondiments()) {
            addCondiments();
        }
    }

    // 通用步骤
    private void boilWater() {
        System.out.println("Boiling water");
    }

    private void pourInCup() {
        System.out.println("Pouring cup");
    }

    // 抽象步骤(子类实现)
    protected abstract void brew();
    protected abstract void addCondiments();

    // 钩子方法，可选覆盖，提供默认实现
    protected boolean customerWantsCondiments() {
        return true;
    }
}
